home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / Evaluate / ParseExpression.h < prev    next >
Text File  |  1994-05-28  |  3KB  |  111 lines

  1. /****************************************************************************************
  2. *
  3. *
  4. *            ParseExpression.c    -Math Expression parser
  5. *
  6. *            ©1993, Graham Cox.
  7. *
  8. ****************************************************************************************/
  9.  
  10. #include    "QueueStack.h"
  11.  
  12.  
  13. typedef struct
  14. {
  15.     char    token;                        //     token code byte
  16.     int        precedence;                    //    precedence value for operators
  17.     char    tString[8];                    //    string matching characters for parsing token
  18.     long    flags;                        //     reserved for future use
  19. }
  20. tEntry, *tEntryPtr, **tEntryHdl;
  21.  
  22. typedef struct
  23. {
  24.     int        nEntries;                    //  number of entries in the table
  25.     tEntry    tkTable[1];                    //    table entries
  26. }
  27. tokenTable, *tkTabPtr, **tkTabHdl;
  28.  
  29.  
  30. typedef struct
  31. {
  32.     extended    varValue;
  33.     char        varName[10];
  34. }
  35. varEntry, *varEntryPtr, **varEntryHdl;
  36.  
  37.  
  38. typedef struct
  39. {
  40.     int            vtSize;
  41.     varEntry    vtTable[1];
  42. }
  43. varTable, *varTabPtr, **varTabHdl;
  44.  
  45.  
  46. typedef struct
  47. {
  48.     extended    startVal;                // initial value
  49.     extended    incVal;                    // increment value
  50.     char        varName[10];            // name of this variable
  51. }
  52. svEntry, *svEntryPtr;
  53.  
  54. typedef struct
  55. {
  56.     int            nTraces;                // number of traces to plot
  57.     int            autoColour;                // flag- auto colour if TRUE
  58.     int            svEntries;                // number of variables in the table
  59.     long        reserved;                // future expansion - do not use
  60.     svEntry        svTable[1];                // array of parameters
  61. }
  62. secVarTab, *secVarTabPtr, **secVarTabHdl;
  63.  
  64.  
  65. #define        tokenTableResType    'TOKN'
  66. #define        tokenTableResID        128
  67.  
  68. /* for binary operators, tokens are just the ASCII code of the symbol. For unary
  69.     operators, the following token values are defined */
  70.     
  71. #define        UnaryPlus        0xCF        //'O
  72. #define        UnaryMinus        0xCE        //'N
  73. #define        Sine            0xD3        //'S
  74. #define        Cosine            0xC3        //'C
  75. #define        Tangent            0xD4        //'T
  76. #define        Exponent        0xC5        //'E
  77. #define        Logarithm        0xCC        //'L
  78. #define        Arcsin            0xD8        //'X
  79. #define        Arccos            0xD9        //'Y
  80. #define        Arctan            0xDA        //'Z
  81. #define        Squareroot        0xD1        //'Q
  82. #define        Absolute        0xD2
  83. #define        RoundOff        0xD6
  84. #define        Random            0xD5
  85.  
  86. #define        SyntaxError        100
  87. #define        LRParenError    101
  88. #define        IllegalTokErr    102
  89. #define        ParseError        103
  90. #define        endOfLine        104
  91. #define        OutOfMemory        105
  92. #define        ItsAllGoneWrong    106
  93. #define        NoTokenTable    107
  94.  
  95. #define        numeric            1
  96. #define        variable        2
  97. #define        exponent        3
  98. #define        operator        4
  99. #define        binOp            5
  100. #define        unaryOp            6
  101.  
  102. #define        ErrorStringListID    130
  103.  
  104.  
  105. QSHandle    MakeRPNQueue(Str255* inString);
  106. extended**    MakeFPObject(extended fpData);
  107. varTabHdl     MakeVariableTable(QSHandle rpnQueue);
  108. QSHandle    CloneQSStruct(QSHandle src);
  109. extended    EvaluateRPN(QSHandle rpnQueue,varTabHdl vTab);
  110.  
  111.